package com.gagakuai.concurrent;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/*
 * Future 代表一类有返回值，可用于异步执行的任务
 * <p>
 * 1:这类任务 在执行中，可以被取消，
 * 2：当任务执行完成之后，可通过get()获取返回值，必要时阻塞直到准备就绪。
 */
public interface Future<V> {

    /*
     * 中止异步任务，包括取消或中断，
     * 参数【通常】表示是否可在任务执行期间中断线程
     */
    boolean cancel(boolean mayInterruptIfRunning);

    /*
     * 判断当前任务是否中止
     */
    boolean isCancelled();

    /*
     * 当前任务是否已完成
     */
    boolean isDone();

    /*
     * 获取任务计算结果，如果任务未完成，则陷入阻塞
     */
    V get() throws InterruptedException, ExecutionException;

    /*
     * 在规定时间内获取任务计算结果，超时后还没获取到的话，会抛出超时异常
     */
    V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

}
